package net.zoneland.zrdp.biz.common;


import net.zoneland.zrdp.common.enums.BaseEnum;

import java.util.EnumSet;

/**
 * 枚举处理工具类.
 * @version v1.0
 * @author Pbody
 */
public final class EnumUtils {

    private EnumUtils() {
    }

    /**
     * 根据枚举值获取枚举对象.
     * @author Pbody
     * @param clazz 目标枚举类
     * @param value 枚举值
     * @param <T> 解析的枚举对象
     * @param <V> 传入的枚举值Value类型，为String或Integer
     * @return T 枚举对象
     **/
    public static <T extends Enum<T> & BaseEnum<V>, V> T getByValue(final Class<T> clazz, final V value) {
        return EnumSet.allOf(clazz).stream()
            .filter(x -> x.getValue().equals(value))
            .findFirst().orElse(null);
    }

    /**
     * 根据枚举值获取枚举成员名称：一般用于EasyExcel写出（不支持枚举对象）、第三方接口等等外部交互的序列化场景.
     * @author Pbody
     * @param clazz 目标枚举类
     * @param value 枚举值
     * @param <T> 解析的枚举对象
     * @param <V> 传入的枚举值Value类型，为String或Integer
     * @return java.lang.String
     **/
    public static <T extends Enum<T> & BaseEnum<V>, V> String getNameByValue(final Class<T> clazz, final V value) {
        return EnumSet.allOf(clazz).stream()
            .filter(x -> x.getValue().equals(value))
            .findFirst()
            .map(BaseEnum::getName)
            .orElse(String.valueOf(value));
    }
}
